package main

import (
	"fmt"
	"math/rand"
	"sort"
)

/*
文档：
https://studygolang.com/static/pkgdoc/pkg/sort.htm#IntSlice.Sort

源码：
https://github.com/golang/go/blob/master/src/sort/sort.go?name=release#192
*/

/* 定义结构体 */
type Person struct {
	Age  int
	Name string
}

/* 定义切片 */
type PeronSlice []Person

/* 实现排序的三个方法 */
func (ps PeronSlice) Len() int {
	return len(ps)
}
func (ps PeronSlice) Less(i, j int) bool {
	return ps[i].Age < ps[j].Age
}
func (ps PeronSlice) Swap(i, j int) {
	// temp := ps[i]
	// ps[i] = ps[j]
	// ps[j] = temp
	ps[i], ps[j] = ps[j], ps[i] // 这种方式更简便
}

func main() {

	var ps PeronSlice
	for i := 0; i < 10; i++ {
		// p := Person{
		// 	Age:  rand.Intn(100),
		// 	Name: fmt.Sprintf("A-%d", rand.Intn(100)),
		// }
		p := Person{rand.Intn(100), fmt.Sprintf("A-%d", rand.Intn(100))}
		ps = append(ps, p)
	}
	for i, v := range ps {
		fmt.Println(i, v)
	}

	sort.Sort(ps)
	fmt.Println("排序后")

	for i, v := range ps {
		fmt.Println(i, v)
	}

}
